package com.heima.system;

import java.util.ArrayList;
import java.util.Scanner;

/*
    --------欢迎来到学生管理系统--------
    1 添加学生
    //"添加成功"
    //学号一旦重复 输出"学号已被占用,请重新输入" 再次输入新学号
    2 删除学生
    //"删除成功"
    //学号如果不存在 "该信息不存在,请重新输入" 重新输入
    3 修改学生
    //姓名\年龄\生日可以修改 学号不可以 "修改成功"
    //学号如果不存在 "该信息不存在,请重新输入" 重新输入
    4 查看学生
    //如果没有 "内容为空,请添加"
    //输出全部学生信息
        学号      姓名       年龄   生日
        heima001  张三       23    1999-11-11
    5 退出
    //"感谢您的使用!"
    请输入您的选择:
 */
class Student {
    private String name,Id,Birth;
    private int age;

    public Student() {
    }

    public Student(String name, String id, String birth, int age) {
        this.name = name;
        Id = id;
        Birth = birth;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    public String getBirth() {
        return Birth;
    }

    public void setBirth(String birth) {
        Birth = birth;
    }
}

public class Test {
    public static void main(String[] args) {
        //定义集合 - 存储学生信息
        ArrayList<Student> stuList = new ArrayList<>();
        //输入数字 - 选择功能
        lo:while(true){
            //开头
            System.out.println("-----------欢迎来到学生管理系统-----------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 修改学生");
            System.out.println("4 查看学生");
            System.out.println("5 退出");
            System.out.println("示例:学号 heima001,姓名 张三,生日 1999-1-1");
            System.out.println("请输入您的选择:");
            //选择功能
            Scanner sc = new Scanner(System.in);
            switch (sc.nextInt()){
                case 1:
                    add(sc,stuList);
                    break;
                case 2:
                    delete(sc,stuList);
                    break;
                case 3:
                    modify(sc,stuList);
                    break;
                case 4:
                    view(stuList);
                    break;
                case 5:
                    exit();
                    break lo;
                default:
                    System.out.println("您的输入有误!");
                    break ;
            }
        }
    }

    public static void add(Scanner sc, ArrayList<Student> stuList){
        Student stu = new Student();
        System.out.println("请输入学生学号");
        stu.setId(sc.next());
        //判断学号唯一性
        for (int i = 0; i < stuList.size(); i++) {//遍历学生集合
            if (stu.getId().equals(stuList.get(i).getId())){//如果 输入学号 与 集合内学号 有相同
                System.out.println("学号已被占用,请重新输入!");
                System.out.println("返回上一层,请按5,其他任意键重新输入");
                if (sc.nextInt() == 5){
                    return;//重新选择功能
                }else {//继续添加学号
                    System.out.println("请重新输入学生学号");
                    stu.setId(sc.next());//一旦找到重复,再次输入
                    i = -1;//从头开始找

                    //!!!!!!! 不可行 !!!!!!!! *注意 : 这样嵌套内层执行完,外层会执行下方语句,重复
                    //add(sc, stuList);
                }
            }
        }
        //如果没有发现学号重复
        System.out.println("请输入学生姓名");
        stu.setName(sc.next());
        System.out.println("请输入学生年龄");
        stu.setAge(sc.nextInt());
        System.out.println("请输入学生生日");
        stu.setBirth(sc.next());
        //把这个新输入的学生对象添加进集合
        stuList.add(stu);//每次添加一个所以new stu一个就行,如果要某一方法内多次添加,需要stu数组 详见D:\IDEA_Project\DayUk_List\src\com\heima\list\ListFilter.java
        System.out.println("添加成功");
    }

    public static void delete(Scanner sc, ArrayList<Student> stuList){
        if (!(stuList.isEmpty())){//如果集合为空,提示无法操作
            System.out.println("请输入要删除学生学号");
            String id = sc.next();//输入学号来查找对象
            for (int i = 0; i < stuList.size(); i++) {//遍历集合
                if(stuList.get(i).getId().equals(id)){
                    stuList.remove(i);//一旦找到,就删除
                    System.out.println("删除成功");
                    break;
                }
                if (i == stuList.size()-1){//遍历也没有找到
                    System.out.println("该信息不存在,请重新输入");
                    System.out.println("返回上一层,请按5,其他任意键重新输入");
                    if (sc.nextInt() == 5){
                        break;
                    }else delete(sc,stuList);//全部找完,没有,要求重新指定删除学生的学号
                }
            }
        }else System.out.println("内容为空,请添加");

    }

    public static void modify(Scanner sc, ArrayList<Student> stuList){
        if (!stuList.isEmpty()){
            System.out.println("请输入要修改学生的学号");
            String id = sc.next();
            int index = -1;//标记位思想 flag
            for (int i = 0; i < stuList.size(); i++) {
                if (stuList.get(i).getId().equals(id)){
                    index = i;//存储该位置
                    break;//一旦找到,跳出for,往下
                }
                if (i == stuList.size()-1){
                    System.out.println("该信息不存在,请重新输入");
                    System.out.println("返回上一层,请按5,其他任意键重新输入");
                    if (sc.nextInt() == 5){
                        return;
                    }else {
                        System.out.println("请输入要修改学生的学号");
                        id = sc.next();//没有找到该学生,再输入
                        i = -1;//从头再找
                        //modify(sc, stuList);
                    }

                }
            }
            System.out.println("请输入要修改的类型");
            System.out.println("1-姓名 2-年龄 3-生日 4-全部");
            int type = sc.nextInt();
            modifyType(sc, stuList, index, type);
            System.out.println("修改成功");
        }else System.out.println("内容为空,请添加");

    }
    public static void modifyType(Scanner sc, ArrayList<Student> stuList, int index, int type) {
        switch(type){
            case 1:
                System.out.println("请修改姓名为");
                stuList.get(index).setName(sc.next());
                break;
            case 2:
                System.out.println("请修改年龄为");
                stuList.get(index).setAge(sc.nextInt());
                break;
            case 3:
                System.out.println("请修改生日为");
                stuList.get(index).setBirth(sc.next());
                break;
            case 4:
                System.out.println("请依次输入全部修改数据");
                for (int i = 1; i < 4; i++) {
                    modifyType(sc, stuList, index, i);
                }
                break;
        }
    }

    public static void view(ArrayList<Student> stuList){//queryStudent()
        if (stuList.isEmpty()){
            System.out.println("内容为空,请添加");
        }else {
            System.out.println("学号      姓名       年龄    生日");//"学号\t\t姓名\t年龄\t生日"
            for (int i = 0; i < stuList.size(); i++) {
                System.out.print(stuList.get(i).getId()+"  ");//\t
                System.out.print(stuList.get(i).getName()+"       ");//\t
                System.out.print(stuList.get(i).getAge()+"     ");//\t
                System.out.println(stuList.get(i).getBirth());
            }
        }
    }

    public static void exit(){
        System.out.println("感谢您的使用!");
    }
}
